home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / c / cug173.zip / BCPL.LXI < prev    next >
Text File  |  1980-01-01  |  4KB  |  153 lines

  1.  
  2. /*
  3.  * bcpl syntax
  4.  */
  5. digit = [0-9];
  6. letter = [a-zA-Z_];
  7. name = letter (letter|digit)*;
  8. integer = [123456789]digit*;
  9. hexdigit = [0-9a-fA-F];
  10. octal = #[0-7][0-7]*;
  11. hex = #[xX]hexdigit*;
  12. realdigits = integer "." [0-9]*
  13. |       "." [0-9][0-9]*
  14. ;
  15. real = realdigits ("e" ([+-]|"") integer | "");
  16. any = [\n\t \014];
  17. illegal = [^a-zA-Z\n\t \014#+-*/^%0-9~!=<>:'"&|()[\]{}`@?,.];
  18. %%
  19. AND     {return(AND);}
  20. BE      {return(BE);}
  21. BREAK   {return(BREAK);}
  22. BY      {return(BY);}
  23. CASE    {return(CASE);}
  24. DO      {return(DO);}
  25. DEFAULT {return(DEFAULT);}
  26. EQ      {return('=');}
  27. EQV     {return(EQV);}
  28. ELSE    {return(OR);}
  29. ENDCASE {return(ENDCASE);}
  30. FALSE   {return(FALSE);}
  31. FOR     {return(FOR);}
  32. FINISH  {return(FINISH);}
  33. GOTO    {return(GOTO);}
  34. GE      {return(GE);}
  35. GR      {return('>');}
  36. GLOBAL  {return(GLOBAL);}
  37. GET     {return(GET);}
  38. IF      {return(IF);}
  39. INTO    {return(INTO);}
  40. LET     {return(LET);}
  41. LV      {return('@');}
  42. LE      {return(LE);}
  43. LS      {return('<');}
  44. LOGOR   {return('|');}
  45. LOGAND  {return('&');}
  46. LOOP    {return(LOOP);}
  47. LSHIFT  {return(LSHIFT);}
  48. MANIFEST        {return(MANIFEST);}
  49. NE      {return(NE);}
  50. NOT     {return('~');}
  51. NEQV    {return(NEQV);}
  52. OR      {return(OR);}
  53. RESULTIS        {return(RESULTIS);}
  54. RETURN  {return(RETURN);}
  55. REM     {return(REM);}
  56. RSHIFT  {return(RSHIFT);}
  57. RV      {return('!');}
  58. REPEAT  {return(REPEAT);}
  59. REPEATWHILE     {return(REPEATWHILE);}
  60. REPEATUNTIL     {return(REPEATUNTIL);}
  61. SWITCHON        {return(SWITCHON);}
  62. STATIC  {return(STATIC);}
  63. TO      {return(TO);}
  64.  
  65. TEST    {return(TEST);}
  66. TRUE    {return(TRUE);}
  67. THEN    {return(THEN);}
  68. TABLE   {return(TABLE);}
  69. UNTIL   {return(UNTIL);}
  70. UNLESS  {return(UNLESS);}
  71. VEC     {return(VEC);}
  72. VALOF   {return(VALOF);}
  73. WHILE   {return(WHILE);}
  74.  
  75. name    {
  76.                 gettoken(token, sizeof token);
  77.                 lexval = lookup(token, 0);
  78.                 return(IDENTIFIER);
  79.         }
  80. hex     {return(number(16));}
  81. octal   {return(number(8));}
  82. integer {return(number(10));}
  83.  
  84. "<"     {single: return(*token(0));}
  85. ">"     {goto single;}
  86. "%"     {goto single;}
  87. "/"     {goto single;}
  88. "*"     {goto single;}
  89. "&"     {goto single;}
  90. "|"     {goto single;}
  91. "^"     {goto single;}
  92. "+"     {goto single;}
  93. "-"     {goto single;}
  94. "!"     {goto single;}
  95. "@"     {goto single;}
  96. "~"     {goto single;}
  97. "("     {goto single;}
  98. ")"     {goto single;}
  99. "{"     {goto single;}
  100. "}"     {goto single;}
  101. ":"     {goto single;}
  102. ";"     {goto single;}
  103. ","     {goto single;}
  104.  
  105. ":="    {return(GETS);}
  106. "<="    {return(LE);}
  107. "~="    {return(NE);}
  108. ">="    {return(GE);}
  109. "<<"    {return(LS);}
  110. ">>"    {return(RS);}
  111. "&&"    {return('&');}
  112. "||"    {return('|');}
  113. "$("    {return('{');}
  114. "$)"    {return('}');}
  115. "->"    {return(ARROW);}
  116.  
  117. "+:="   {return(ASPLUS);}
  118. "-:="   {return(ASMINUS);}
  119. "/:="   {return(ASDIV);}
  120. "REM:=" {return(ASMOD);}
  121. "*:="   {return(ASTIMES);}
  122. "<<:="  {return(ASLSHIFT);}
  123. ">>:="  {return(ASRSHIFT);}
  124. "|:="   {return(ASOR);}
  125. "&:="   {return(ASAND);}
  126. "NEQV:="        {return(ASEXOR);}
  127.  
  128.  
  129. "/*"    {comment("*/");}
  130. "'"     {;}
  131. "\""    {
  132.                 lexval = calloc(2, sizeof lexval);
  133.                 string(lexval);
  134.                 return(STRING);
  135.         }
  136. any     {
  137.                 gettoken(token, sizeof token);
  138.                 c = *token;
  139.                 if (c=='\n')
  140.                         yyline++;
  141.         }
  142. %%
  143.  
  144. number(radix)
  145. {
  146.         long l;
  147.         char digits[30];
  148.  
  149.         gettoken(digits, sizeof digits);
  150.         l = integ(digits, radix);
  151.         return(l);
  152. }
  153.